package com.hardy.leetcode;

import java.util.Scanner;

/**
 *
 * 今天的计算机课上，老师给同学们出了一道题：
 输入n个数，请将其中的偶数的二进制反转。
 eg：输入1 6 5
 其中6是偶数，二进制表示为110，反转后为011，代表3，所以最终输出1 3 5.
 小贱君最近脑子不怎么好使，想了半天也没想出来如何做，最后他向你寻求帮助了，帮帮可怜的小贱君吧！
 输入包含多组测试数据。

 对于每组测试数据：

 N --- 输入的数字个数

 N个数：a0,a1,...,an-1

 保证：

 1<=N<=3000,0<=ai<=INT_MAX.
 5
 1 3 10 6 7
 6
 26 52 31 45 82 34

 输出例子:
 1 3 5 3 7
 11 11 31 45 37 17
 * User: Ruijie Date: 2016/8/3
 */
public class EvenReversal {
    public static int[] getReversalArray1(int[] arr){
        int[] res=new int[arr.length];
        for(int i=0;i<arr.length;i++){
            if(arr[i]%2==0){
                int k=arr[i];
                int rn=0;
                while(k!=0)
                {
                    rn <<= 1;
                    rn |= (k & 1);
                    k >>= 1;
                }
                k = rn;
                res[i]=k;
            }else{
                res[i]=arr[i];
            }
        }
        return res;
    }
    public static int[] getReversalArray(int[] arr){
        int[] res=new int[arr.length];
        for(int i=0;i<arr.length;i++){
            if(arr[i]%2==0){
                res[i]=reverEven(arr[i]);
            }else{
                res[i]=arr[i];
            }
        }
        return res;
    }
    public static int reverEven(int num){
        String str=Integer.toBinaryString(num);
        char[] arrStr=str.toCharArray();
        int left=0,right=arrStr.length-1;
        while(left<=right){
            swap(arrStr,left,right);
            left++;
            right--;
        }
        String newStr=String.valueOf(arrStr);
        return Integer.parseInt(newStr,2);
    }
    public static void swap(char[] arrChar,int left,int right){
        char temp=arrChar[left];
        arrChar[left]=arrChar[right];
        arrChar[right]=temp;
    }
    public static void printArray(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }
   /*public static void main(String[] args) {
        int[] arr1={1,3,10,6,7};
        int[] arr2={26,52,31,45,82,34};
        printArray(getReversalArray(arr1));
       System.out.println();
        printArray(getReversalArray(arr2));
       System.out.println();
       printArray(getReversalArray1(arr1));
       System.out.println();
       printArray(getReversalArray1(arr2));

    }*/
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        Integer len=sca.nextInt();
        int[] arr=new int[len];
        for(int i=0;i<len;i++){
            arr[i]=sca.nextInt();
        }
        printArray(getReversalArray(arr));
    }

}
